#ifndef _BSP_ILI9341_H_
#define _BSP_ILI9341_H_

#include "stm32f10x.h"
#include "bsp_systick.h"

//由片选引脚决定的NOR/SRAM块
#define      FSMC_Bank1_NORSRAMx           FSMC_Bank1_NORSRAM4

/******************************* ILI9341 显示屏8080通讯引脚定义 ***************************/
/****** 控制信号 ******/
//片选 选择NOR/SRAM块
#define      ILI9341_CS_CLK                RCC_APB2Periph_GPIOG   
#define      ILI9341_CS_PORT               GPIOG
#define      ILI9341_CS_PIN                GPIO_Pin_12

//DC引脚 使用FSMC的地址信号控制,本引脚决定了访问LCD时使用的地址
//PE2为FSMC_A23
#define      ILI9341_DC_CLK                RCC_APB2Periph_GPIOE   
#define      ILI9341_DC_PORT               GPIOE
#define      ILI9341_DC_PIN                GPIO_Pin_2

//写使能
#define      ILI9341_WR_CLK                RCC_APB2Periph_GPIOD   
#define      ILI9341_WR_PORT               GPIOD
#define      ILI9341_WR_PIN                GPIO_Pin_5

//读使能
#define      ILI9341_RD_CLK                RCC_APB2Periph_GPIOD   
#define      ILI9341_RD_PORT               GPIOD
#define      ILI9341_RD_PIN                GPIO_Pin_4

//复位引脚
#define      ILI9341_RST_CLK               RCC_APB2Periph_GPIOG 
#define      ILI9341_RST_PORT              GPIOG
#define      ILI9341_RST_PIN               GPIO_Pin_11

//背光引脚
#define      ILI9341_BK_CLK                RCC_APB2Periph_GPIOG    
#define      ILI9341_BK_PORT               GPIOG
#define      ILI9341_BK_PIN                GPIO_Pin_6

/******** 数据信号线 ***************/
#define      ILI9341_D0_CLK                RCC_APB2Periph_GPIOD   
#define      ILI9341_D0_PORT               GPIOD
#define      ILI9341_D0_PIN                GPIO_Pin_14

#define      ILI9341_D1_CLK                RCC_APB2Periph_GPIOD   
#define      ILI9341_D1_PORT               GPIOD
#define      ILI9341_D1_PIN                GPIO_Pin_15

#define      ILI9341_D2_CLK                RCC_APB2Periph_GPIOD   
#define      ILI9341_D2_PORT               GPIOD
#define      ILI9341_D2_PIN                GPIO_Pin_0

#define      ILI9341_D3_CLK                RCC_APB2Periph_GPIOD  
#define      ILI9341_D3_PORT               GPIOD
#define      ILI9341_D3_PIN                GPIO_Pin_1

#define      ILI9341_D4_CLK                RCC_APB2Periph_GPIOE   
#define      ILI9341_D4_PORT               GPIOE
#define      ILI9341_D4_PIN                GPIO_Pin_7

#define      ILI9341_D5_CLK                RCC_APB2Periph_GPIOE   
#define      ILI9341_D5_PORT               GPIOE
#define      ILI9341_D5_PIN                GPIO_Pin_8

#define      ILI9341_D6_CLK                RCC_APB2Periph_GPIOE   
#define      ILI9341_D6_PORT               GPIOE
#define      ILI9341_D6_PIN                GPIO_Pin_9

#define      ILI9341_D7_CLK                RCC_APB2Periph_GPIOE  
#define      ILI9341_D7_PORT               GPIOE
#define      ILI9341_D7_PIN                GPIO_Pin_10

#define      ILI9341_D8_CLK                RCC_APB2Periph_GPIOE   
#define      ILI9341_D8_PORT               GPIOE
#define      ILI9341_D8_PIN                GPIO_Pin_11

#define      ILI9341_D9_CLK                RCC_APB2Periph_GPIOE   
#define      ILI9341_D9_PORT               GPIOE
#define      ILI9341_D9_PIN                GPIO_Pin_12

#define      ILI9341_D10_CLK                RCC_APB2Periph_GPIOE   
#define      ILI9341_D10_PORT               GPIOE
#define      ILI9341_D10_PIN                GPIO_Pin_13

#define      ILI9341_D11_CLK                RCC_APB2Periph_GPIOE   
#define      ILI9341_D11_PORT               GPIOE
#define      ILI9341_D11_PIN                GPIO_Pin_14

#define      ILI9341_D12_CLK                RCC_APB2Periph_GPIOE   
#define      ILI9341_D12_PORT               GPIOE
#define      ILI9341_D12_PIN                GPIO_Pin_15

#define      ILI9341_D13_CLK                RCC_APB2Periph_GPIOD   
#define      ILI9341_D13_PORT               GPIOD
#define      ILI9341_D13_PIN                GPIO_Pin_8

#define      ILI9341_D14_CLK                RCC_APB2Periph_GPIOD   
#define      ILI9341_D14_PORT               GPIOD
#define      ILI9341_D14_PIN                GPIO_Pin_9

#define      ILI9341_D15_CLK                RCC_APB2Periph_GPIOD   
#define      ILI9341_D15_PORT               GPIOD
#define      ILI9341_D15_PIN                GPIO_Pin_10

/***************************ILI9341 显示屏的FSMC参数定义 ******************************************/
// FSMC_Bank1_NORSRAM用于LCD命令操作的地址
#define      FSMC_Addr_ILI9341_CMD         ( ( uint32_t ) 0x6C000000 )
// FSMC_Bank1_NORSRAM用于LCD数据操作的地址
#define      FSMC_Addr_ILI9341_DATA        ( ( uint32_t ) 0x6D000000 )

#define 	ILI9341_LESS_PIXEL	  			240			//液晶屏较短方向的像素宽度
#define 	ILI9341_MORE_PIXEL	 			320			//液晶屏较长方向的像素宽度

/***************************ILI9341 常用命令 ******************************************/
#define      CMD_SetCoordinateX		 		0x2A	     //设置X坐标
#define      CMD_SetCoordinateY		 		0x2B	     //设置Y坐标
#define      CMD_SetPixel		 		    0x2C	     //填充像素

/******************************* ILI9341常用颜色 ********************************/
#define      BACKGROUND		                BLACK   //默认背景黑色
#define      WHITE		 		           0xFFFF	   //白色
#define      BLACK                         0x0000	   //黑色
#define      GREY                          0xF7DE	   //灰色 
#define      BLUE                          0x001F	   //蓝色
#define      BLUE2                         0x051F	   //浅蓝色 
#define      RED                           0xF800	   //红色
#define      MAGENTA                       0xF81F	   //红紫色 
#define      GREEN                         0x07E0	   //绿色
#define      CYAN                          0x7FFF	   //蓝绿色
#define      YELLOW                        0xFFE0	   //黄色
#define      BRED                          0xF81F
#define      GRED                          0xFFE0
#define      GBLUE                         0x07FF

extern uint16_t LCD_X_LENGTH,LCD_Y_LENGTH; 

void bsp_ili9341_init(void);
void bsp_ili9341_clear(uint16_t usX, uint16_t usY, uint16_t usWidth, uint16_t usHeight );


#endif
